#include "comm.h"

int main()
{
    key_t k = getkey();
    // int n = shmget(key_t key,size_t size, int shmflg);
    printf("key: 0X%x\n", k);
    // 创建共享内存
    int shmid = createShm(k);
    printf("shmid: %d\n", shmid);

    sleep(5);
    // 把创建好的共享内存通过页表映射到当前进程中(挂接当前进程)
    char *start = (char *)attchShm(shmid);
    printf("attach sucess, address start: %p\n", start);
    // 使用
    while (1)
    {
        printf("client say: %s\n", start);
        sleep(1);

        // 共享内存的内核结构 struct shmid_ds
        // 获取共享内存的属性
        struct shmid_ds ds;
        shmctl(shmid, IPC_STAT, &ds); // 获取内核当中共享的属性
        printf("获取属性：size：%d, pid: %d, myself: %d, key:0x%x\n", ds.shm_segsz, ds.shm_cpid, getpid(), ds.shm_perm.__key);
    }

    sleep(5);
    // 去关联(就是把进程和共享内存之间的映射关系去掉)
    datechShm(start);
    sleep(5);

    // 删除共享内存
    delShm(shmid);
    return 0;
}
